package org.langqiao.algorithm;
/*
 * 歌手大赛的规则一般是去掉一个最高分，和一个最低分，然后让其他余下的数求平均数，当评委比较少的情况下，只许去掉一个分数
 * 该怎样设计呢？有人提出应该去掉与其余分数的平均数差距最大的那个数，即为离群的分数。下列程序用于实现这个功能，x存储所有评分，n表示
 * 数组中元素的个数，函数返回最离群的那个分数的值，
 */
public class StrayDigit {
	public static void main(String[] args){
		double[] a={5,7,9,6};
		double b = score(a,4);
		System.out.println("最离群的那个数是："+b);
	}
	
	public static double score(double[] x,int n){
		double bad = 0,sum = 0;
	    double disf = -1;
	    //第一个for循环用来控制外层循环的
		for(int i = 0;i < n;i++) {
			for(int j = 0;j < n;j++) {
				if(j != i)
					sum += x[j];//这里必须是n-1个x相加，用j!=i来控制
			}
			//t来表示离去掉的那个数与其余数的平均值之差
			double t = x[i]-sum/(n-1);//由这里可以看出来sum是(n-1)个数的和，sum/(n-1)为平均数
			if(t < 0)
				t = -t;
			if(t > disf) {
				disf = t;
				bad = x[i];
				System.out.println(i+"\t"+x[i]);
			}
		}
	    return bad;
	}
}
